#pragma once
#include <mutex>
#include <curl/curl.h>

//采用RAII（资源获取即初始化）思想，创建一个专门的类来管理 libcurl 的全局状态
class CurlGlobalManager {
public:
    CurlGlobalManager() {
        std::lock_guard<std::mutex> lock(m_mutex);
        if (m_ref_count++ == 0) {
            curl_global_init(CURL_GLOBAL_ALL);
        }
    }

    ~CurlGlobalManager() {
        std::lock_guard<std::mutex> lock(m_mutex);
        if (--m_ref_count == 0) {
            curl_global_cleanup();
        }
    }

    // 禁止拷贝和移动
    CurlGlobalManager(const CurlGlobalManager&) = delete;
    CurlGlobalManager& operator=(const CurlGlobalManager&) = delete;

private:
    // 使用 inline 直接在头文件中定义和初始化静态成员
    inline static std::mutex m_mutex;
    inline static int m_ref_count = 0;
};

